home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1995 / 3 / 02 / tips.ampk / Tips&Tricks / Icons entfernen / GetDeviceName.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-01  |  1.9 KB  |  84 lines

  1. #include <exec/execbase.h>
  2. #include <dos/dos.h>
  3. #include <dos/rdargs.h>
  4. #include <clib/dos_protos.h>
  5.  
  6. #include <string.h>
  7.  
  8. #define VOLUME_LEN 200
  9.  
  10. char ArgStr[] = "VOLUME/A";
  11. long ArgArray[1] = { 0 };
  12. extern struct ExecBase *SysBase;
  13.  
  14. char VolumeName[VOLUME_LEN];
  15.  
  16. int main(void)
  17. {
  18.    struct RDArgs *rda;
  19.    BOOL error = TRUE;
  20.  
  21.    if (SysBase->LibNode.lib_Version < 37)
  22.    {  return RETURN_FAIL; }
  23.  
  24.    if (rda = ReadArgs(ArgStr,ArgArray,NULL))
  25.    {
  26.       char *p;
  27.       struct DosList *dol;
  28.  
  29.       strncpy(VolumeName,(char *)(ArgArray[0]),VOLUME_LEN-1);
  30.  
  31.       // Doppelpunkt rausfiltern
  32.       if (p = strchr(VolumeName,':'))
  33.       {  *p = '\0'; }
  34.  
  35.       if (dol = LockDosList(LDF_READ|LDF_DEVICES|LDF_VOLUMES))
  36.       {  struct DosList *dolv, *dold;
  37.  
  38.          SetIoErr(ERROR_OBJECT_NOT_FOUND); // für den Fall
  39.          dolv = FindDosEntry(dol,VolumeName,LDF_VOLUMES);
  40.          if (dolv->dol_Task)
  41.          {  struct MsgPort *mport;
  42.             mport = dolv->dol_Task;
  43.             if (mport->mp_SigTask)
  44.             {  struct Task *task;
  45.                task = mport->mp_SigTask;
  46.                if (task->tc_Node.ln_Name)
  47.                {  dold = FindDosEntry(dol,task->tc_Node.ln_Name,LDF_DEVICES);
  48.                   if (dold != 0L)
  49.                   {  Write(Output(),(char *)BADDR(dold->dol_Name)+1,
  50.                                     *(char *)BADDR(dold->dol_Name));
  51.                      PutStr("\n");
  52.                      error = FALSE;
  53.                   }
  54.                }
  55.             }
  56.          }
  57.          UnLockDosList(LDF_READ|LDF_DEVICES|LDF_VOLUMES);
  58.       }
  59.       else
  60.       {  SetIoErr(ERROR_LOCK_COLLISION);
  61.          error = TRUE;
  62.       }
  63.  
  64.       FreeArgs(rda);
  65.    }
  66.    else
  67.    {  error = TRUE; }
  68.  
  69.    if (error)
  70.    {  char ProgName[100];
  71.       if (GetProgramName(ProgName,100))
  72.       {  PrintFault(IoErr(),ProgName); }
  73.       else
  74.       {  PrintFault(IoErr(),"GetDeviceName"); }
  75.  
  76.       return RETURN_FAIL;
  77.    }
  78.    else
  79.    {
  80.       return RETURN_OK;
  81.    }
  82. }
  83.  
  84.